package com.example.demo.controller.conllection;

import com.example.demo.model.ResponseData;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.CollectionOptions;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.CriteriaDefinition;
import org.springframework.data.mongodb.core.validation.Validator;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author hanqiang
 * @Classname collectionController
 * @Date 2020/10/4 22:57
 * @Description:
 */
@RestController
@RequestMapping("/collection")
public class CreateCollectionController {
    @Autowired
    MongoTemplate mongoTemplate;

    @ApiOperation(value="创建集合",notes="创建集合")
    @PostMapping("/createCollection")
    public ResponseData createCollection(){
        String collectionName="shops";
        mongoTemplate.createCollection(collectionName);
        return ResponseData.success(mongoTemplate.collectionExists(collectionName));
    }

    @ApiOperation(value="创建固定集合",notes = "创建固定大小集合")
    @PostMapping("/createFixedCollection")
    public ResponseData createFixedCollection(){
        long  size=1024L;
        long max=5L;
        String collectionName="shops";
        CollectionOptions collectionOptions = CollectionOptions.empty()
                // 创建固定集合。固定集合是指有着固定大小的集合，当达到最大值时，它会自动覆盖最早的文档。
                .capped()
                // 固定集合指定一个最大值，以千字节计(KB),如果 capped 为 true，也需要指定该字段。
                .size(max)
                // 指定固定集合中包含文档的最大数量。
                .maxDocuments(size);
        mongoTemplate.createCollection(collectionName,collectionOptions);
        return ResponseData.success(mongoTemplate.collectionExists(collectionName));
    }

    @ApiOperation(value="创建验证文档数据集合",notes="创建验证文档数据集合")
    @PostMapping("/creatCollectionValidation")
    public ResponseData creatCollectionValidation(){
        String collectionName="shops";
        //这是验证条件
        CriteriaDefinition criteria= Criteria.where("price").is(20);
        CollectionOptions collectionOptions=CollectionOptions.empty()
                .validator(Validator.criteria(criteria))
                //设置效验级别
                .strictValidation()
                //设置验证不通过动作
                .failOnValidationError();
        mongoTemplate.createCollection(collectionName, collectionOptions);
        return ResponseData.success(mongoTemplate.collectionExists(collectionName));
    }


}
